home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / help.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-09  |  13.6 KB  |  587 lines

  1. /*
  2.  *    @(#) help.c 12.1 95/05/09 SCOINC
  3.  */
  4. /***************************************************************************
  5.  *
  6.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  7.  *
  8.  *    All rights reserved.  No part of this program or publication may be
  9.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  10.  *    or translated into any language or computer language, in any form or
  11.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  12.  *    biological, or otherwise, without the prior written permission of:
  13.  *
  14.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  15.  *        400 Encinal St., Santa Cruz, California 95060 USA
  16.  *
  17.  **************************************************************************/
  18. /*
  19.  *    SCCS Stuff
  20.  *
  21.  *    @(#) help.c 12.1 95/05/09 SCOINC
  22.  *
  23.  * Modification History
  24.  *
  25.  * S003, 15-Sep-93, rickra
  26.  *     Delete the proper widget instead of the pull down widget that
  27.  *    activated the help window.....
  28.  *
  29.  * S002, 25-May-93, rickra
  30.  *    Now delete help windows instead of just  unmanaging them.
  31.  *
  32.  * S001, 01-Jan-93, rickra
  33.  *     Changed the default width and height.
  34.  *    Added Font changing capability.
  35.  *
  36.  * S000, 30-Sep-92, rickra
  37.  *     Added copyright and modification history
  38.  */
  39. #include <X11/Xlib.h>
  40. #include <X11/Xutil.h>
  41. #include <X11/Intrinsic.h>
  42. #include <X11/Shell.h>
  43. #include <X11/StringDefs.h>
  44. #include <Xm/Xm.h>
  45. #include <Xm/MainW.h>
  46. #include <Xm/DrawingA.h>
  47. #include <Xm/PanedW.h>
  48. #include <Xm/Text.h>
  49. #include <Xm/List.h>
  50. #include <Xm/PushB.h>
  51. #include <Xm/Form.h>
  52. #include <Xm/ToggleB.h>
  53. #include <Xm/Label.h>
  54. #include <Xm/RowColumn.h>
  55. #include <Xm/MessageB.h>
  56. #include <Xm/DialogS.h>
  57. #include <Xm/Protocols.h>
  58. #include <string.h>
  59. #include <stdio.h>
  60. #include <ctype.h>
  61.  
  62. #include "include/unixincs.h"
  63. #include "include/menus.h"
  64. #include "include/help.h"
  65. #include "include/buttons.h"
  66. #include "include/xsw.h"
  67. extern struct NetworkXswStruct *current_server;
  68.  
  69. extern Widget   sub_menu_state_list[Max_sub_menu_buttons];
  70.  
  71. extern Display *display;
  72. XFontStruct    *Current_Font;
  73.  
  74. XmFontList      Font_List;
  75.  
  76. char           *my_help_general;
  77. char           *my_help_options;
  78. char           *my_help_problems;
  79. Widget          general_help_widget;
  80. Widget          general_help_dialog;
  81.  
  82. Widget          options_help_widget;
  83. Widget          options_help_dialog;
  84.  
  85. Widget          known_help_widget;
  86. Widget          known_help_dialog;
  87.  
  88. Atom            general_help_atom;
  89. Atom            options_help_atom;
  90. Atom            known_help_atom;
  91.  
  92.  
  93. void
  94. pop_down_general_help (w, client_data, call_data)
  95.  
  96.      Widget          w;
  97.      caddr_t         client_data;
  98.      XmAnyCallbackStruct *call_data;
  99. {
  100.  
  101.   Arg             wargs[5];
  102.   int             argcount;
  103.  
  104.  
  105.   XtDestroyWidget (general_help_dialog);
  106.  
  107.   free (my_help_general);
  108.  
  109.   argcount = 0;
  110.   XtSetArg (wargs[argcount], XmNsensitive, True);
  111.   argcount++;
  112.   XtSetArg (wargs[argcount], XmNset, False);
  113.   argcount++;
  114.   XtSetValues (sub_menu_state_list[BUTTON_general_help], wargs,
  115.            argcount);
  116.  
  117.  
  118. }
  119.  
  120. void
  121. pop_down_options_help (w, client_data, call_data)
  122.  
  123.      Widget          w;
  124.      caddr_t         client_data;
  125.      XmAnyCallbackStruct *call_data;
  126. {
  127.  
  128.   Arg             wargs[5];
  129.   int             argcount;
  130.  
  131.   XtDestroyWidget (options_help_dialog);
  132.  
  133.   free (my_help_options);
  134.  
  135.   argcount = 0;
  136.   XtSetArg (wargs[argcount], XmNsensitive, True);
  137.   argcount++;
  138.   XtSetArg (wargs[argcount], XmNset, False);
  139.   argcount++;
  140.   XtSetValues (sub_menu_state_list[BUTTON_options_help], wargs,
  141.            argcount);
  142.  
  143. }
  144.  
  145. void
  146. pop_down_problems_help (w, client_data, call_data)
  147.  
  148.      Widget          w;
  149.      caddr_t         client_data;
  150.      XmAnyCallbackStruct *call_data;
  151. {
  152.  
  153.   Arg             wargs[5];
  154.   int             argcount;
  155.  
  156.  
  157.  
  158.   XtDestroyWidget (known_help_dialog);
  159.   free (my_help_problems);
  160.  
  161.   argcount = 0;
  162.   XtSetArg (wargs[argcount], XmNsensitive, True);
  163.   argcount++;
  164.   XtSetArg (wargs[argcount], XmNset, False);
  165.   argcount++;
  166.   XtSetValues (sub_menu_state_list[BUTTON_known_help], wargs,
  167.            argcount);
  168.  
  169. }
  170.  
  171.  
  172.  
  173. void
  174. help_general (w, str, call_data)
  175.      Widget          w;
  176.      char           *str[];
  177.      caddr_t         call_data;
  178. {
  179.  
  180.  
  181.   int             j, i, n;
  182.   Widget          label;
  183.   Widget          pop_down_button;
  184.   Arg             wargs[20];
  185.   int             argcount;
  186.   XmString        xmstr;
  187.   XmString        xm_string;
  188.   int             done = 0;
  189.   int             size = 0;
  190.  
  191.   argcount = 0;
  192.   XtSetArg (wargs[argcount], XmNsensitive, False);
  193.   argcount++;
  194.   XtSetValues (sub_menu_state_list[BUTTON_general_help], wargs,
  195.            argcount);
  196.  
  197.  
  198.   i = 0;
  199.   while (!done)
  200.     {
  201.  
  202.       if (strncmp (help_string_general[i], "ALLDONE", 7) == 0)
  203.     done = 1;
  204.       else
  205.     {
  206.       size += strlen (help_string_general[i]) + 1;
  207.       i++;
  208.     }
  209.  
  210.     }
  211.  
  212.   my_help_general = (char *) malloc (size);
  213.   my_help_general[0] = '\0';
  214.  
  215.  
  216.   for (j = 0; j < i; j++)
  217.     {
  218.       my_help_general = strcat (my_help_general, help_string_general[j]);
  219.     }
  220.  
  221.  
  222.   xm_string = XmStringLtoRCreate ("General Help",
  223.                   XmSTRING_DEFAULT_CHARSET);
  224.  
  225.   n = 0;
  226.   XtSetArg (wargs[n], XmNautoUnmanage, FALSE);
  227.   n++;
  228.   XtSetArg (wargs[n], XmNdialogTitle, xm_string);
  229.   n++;
  230.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  231.   n++;
  232.   XtSetArg (wargs[n], XmNminWidth, 8 * 80);
  233.   n++;
  234.   XtSetArg (wargs[n], XmNmaxWidth, 8 * 80);
  235.   n++;
  236.   XtSetArg (wargs[n], XmNheight, 300);
  237.   n++;
  238.   XtSetArg (wargs[n], XmNdeleteResponse, XmDESTROY);
  239.   n++;
  240.   general_help_dialog = XmCreateFormDialog (w, "GeneralHelp", wargs, n);
  241.  
  242.   n = 0;
  243.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  244.   n++;
  245.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  246.   n++;
  247.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_FORM);
  248.   n++;
  249.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  250.   n++;
  251.   pop_down_button = XtCreateWidget ("DONE",
  252.                     xmPushButtonWidgetClass,
  253.                     general_help_dialog,
  254.                     wargs,
  255.                     n);
  256.  
  257.   Current_Font = XLoadQueryFont (display, current_server -> font_name);
  258.   Font_List = XmFontListCreate (Current_Font, XmSTRING_DEFAULT_CHARSET);
  259.  
  260.   n = 0;
  261.  
  262.   XtSetArg (wargs[n], XmNfontList, Font_List);
  263.   n++;
  264.   XtSetArg (wargs[n], XmNrows, 20);
  265.   n++;
  266.   XtSetArg (wargs[n], XmNscrollingPolicy, XmAPPLICATION_DEFINED);
  267.   n++;
  268.   XtSetArg (wargs[n], XmNscrollVertical, True);
  269.   n++;
  270.   XtSetArg (wargs[n], XmNscrollHorizontal, False);
  271.   n++;
  272.   XtSetArg (wargs[n], XmNeditMode, XmMULTI_LINE_EDIT);
  273.   n++;
  274.   XtSetArg (wargs[n], XmNeditable, FALSE);
  275.   n++;
  276.   XtSetArg (wargs[n], XmNvalue, my_help_general);
  277.   n++;
  278.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  279.   n++;
  280.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_WIDGET);
  281.   n++;
  282.   XtSetArg (wargs[n], XmNbottomWidget, pop_down_button);
  283.   n++;
  284.   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
  285.   n++;
  286.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  287.   n++;
  288.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  289.   n++;
  290.   general_help_widget = XmCreateScrolledText (general_help_dialog,
  291.                           "Text1", wargs, n);
  292.  
  293.  
  294.  
  295.   general_help_atom = XmInternAtom (XtDisplay (general_help_widget),
  296.                     "WM_DELETE_WINDOW",
  297.                     False);
  298.  
  299.   XmAddWMProtocolCallback (XtParent (general_help_dialog),
  300.                general_help_atom,
  301.                pop_down_general_help,
  302.                NULL);
  303.  
  304.  
  305.   XtAddCallback (pop_down_button, XmNactivateCallback,
  306.          pop_down_general_help,
  307.          NULL);
  308.  
  309.   XtManageChild (pop_down_button);
  310.   XtManageChild (general_help_widget);
  311.   XtManageChild (general_help_dialog);
  312.  
  313. }
  314.  
  315.  
  316. void
  317. help_options (w, str, call_data)
  318.      Widget          w;
  319.      char           *str[];
  320.      caddr_t         call_data;
  321. {
  322.  
  323.  
  324.   int             j, i, n;
  325.   Widget          label;
  326.   Widget          pop_down_button;
  327.   Arg             wargs[20];
  328.   int             argcount;
  329.   XmString        xmstr;
  330.   XmString        xm_string;
  331.   int             done = 0;
  332.  
  333.  
  334.   argcount = 0;
  335.   XtSetArg (wargs[argcount], XmNsensitive, False);
  336.   argcount++;
  337.   XtSetValues (sub_menu_state_list[BUTTON_options_help], wargs,
  338.            argcount);
  339.  
  340.  
  341.  
  342.   i = 0;
  343.   while (!done)
  344.     {
  345.  
  346.       if (strncmp (help_string_options[i], "ALLDONE", 7) == 0)
  347.     done = 1;
  348.       else
  349.     i++;
  350.  
  351.     }
  352.  
  353.   my_help_options = (char *) malloc (i * 80);
  354.   my_help_options[0] = '\0';
  355.  
  356.  
  357.   for (j = 0; j < i; j++)
  358.     {
  359.       my_help_options = strcat (my_help_options, help_string_options[j]);
  360.     }
  361.  
  362.  
  363.   xm_string = XmStringLtoRCreate ("Options Help",
  364.                   XmSTRING_DEFAULT_CHARSET);
  365.  
  366.   n = 0;
  367.   XtSetArg (wargs[n], XmNautoUnmanage, FALSE);
  368.   n++;
  369.   XtSetArg (wargs[n], XmNdialogTitle, xm_string);
  370.   n++;
  371.   XtSetArg (wargs[n], XmNminWidth, 8 * 80);
  372.   n++;
  373.   XtSetArg (wargs[n], XmNmaxWidth, 8 * 80);
  374.   n++;
  375.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  376.   n++;
  377.   XtSetArg (wargs[n], XmNheight, 300);
  378.   n++;
  379.   XtSetArg (wargs[n], XmNdeleteResponse, XmDESTROY);
  380.   n++;
  381.   options_help_dialog = XmCreateFormDialog (w, "OptionsHelp", wargs, n);
  382.  
  383.   n = 0;
  384.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  385.   n++;
  386.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  387.   n++;
  388.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_FORM);
  389.   n++;
  390.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  391.   n++;
  392.   pop_down_button = XtCreateWidget ("DONE",
  393.                     xmPushButtonWidgetClass,
  394.                     options_help_dialog,
  395.                     wargs,
  396.                     n);
  397.  
  398.   Current_Font = XLoadQueryFont (display, current_server -> font_name);
  399.  
  400.   Font_List = XmFontListCreate (Current_Font, XmSTRING_DEFAULT_CHARSET);
  401.  
  402.   n = 0;
  403.   XtSetArg (wargs[n], XmNfontList, Font_List);
  404.   n++;
  405.   XtSetArg (wargs[n], XmNrows, 20);
  406.   n++;
  407.   XtSetArg (wargs[n], XmNscrollingPolicy, XmAPPLICATION_DEFINED);
  408.   n++;
  409.   XtSetArg (wargs[n], XmNscrollVertical, True);
  410.   n++;
  411.   XtSetArg (wargs[n], XmNscrollHorizontal, False);
  412.   n++;
  413.   XtSetArg (wargs[n], XmNeditMode, XmMULTI_LINE_EDIT);
  414.   n++;
  415.   XtSetArg (wargs[n], XmNeditable, FALSE);
  416.   n++;
  417.   XtSetArg (wargs[n], XmNvalue, my_help_options);
  418.   n++;
  419.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  420.   n++;
  421.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_WIDGET);
  422.   n++;
  423.   XtSetArg (wargs[n], XmNbottomWidget, pop_down_button);
  424.   n++;
  425.   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
  426.   n++;
  427.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  428.   n++;
  429.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  430.   n++;
  431.   options_help_widget = XmCreateScrolledText (options_help_dialog,
  432.                           "Text1", wargs, n);
  433.  
  434.   options_help_atom = XmInternAtom (XtDisplay (options_help_widget),
  435.                     "WM_DELETE_WINDOW",
  436.                     False);
  437.  
  438.   XmAddWMProtocolCallback (XtParent (options_help_dialog),
  439.                options_help_atom,
  440.                pop_down_options_help,
  441.                NULL);
  442.  
  443.   XtAddCallback (pop_down_button, XmNactivateCallback,
  444.          pop_down_options_help,
  445.          NULL);
  446.  
  447.   XtManageChild (pop_down_button);
  448.   XtManageChild (options_help_widget);
  449.   XtManageChild (options_help_dialog);
  450.  
  451. }
  452.  
  453. void
  454. help_problems (w, str, call_data)
  455.      Widget          w;
  456.      char           *str[];
  457.      caddr_t         call_data;
  458. {
  459.  
  460.  
  461.   int             j, i, n;
  462.   Widget          label;
  463.   Widget          pop_down_button;
  464.   Arg             wargs[20];
  465.   int             argcount;
  466.   XmString        xmstr;
  467.   XmString        xm_string;
  468.   int             done = 0;
  469.  
  470.  
  471.   argcount = 0;
  472.   XtSetArg (wargs[argcount], XmNsensitive, False);
  473.   argcount++;
  474.   XtSetValues (sub_menu_state_list[BUTTON_known_help], wargs,
  475.            argcount);
  476.  
  477.   i = 0;
  478.   while (!done)
  479.     {
  480.  
  481.       if (strncmp (help_string_problems[i], "ALLDONE", 7) == 0)
  482.     done = 1;
  483.       else
  484.     i++;
  485.  
  486.     }
  487.  
  488.   my_help_problems = (char *) malloc (i * 80);
  489.   my_help_problems[0] = '\0';
  490.  
  491.  
  492.   for (j = 0; j < i; j++)
  493.     {
  494.       my_help_problems = strcat (my_help_problems, help_string_problems[j]);
  495.     }
  496.  
  497.  
  498.   xm_string = XmStringLtoRCreate ("HELP",
  499.                   XmSTRING_DEFAULT_CHARSET);
  500.  
  501.   n = 0;
  502.   XtSetArg (wargs[n], XmNautoUnmanage, FALSE);
  503.   n++;
  504.   XtSetArg (wargs[n], XmNdialogTitle, xm_string);
  505.   n++;
  506.   XtSetArg (wargs[n], XmNminWidth, 8 * 80);
  507.   n++;
  508.   XtSetArg (wargs[n], XmNmaxWidth, 8 * 80);
  509.   n++;
  510.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  511.   n++;
  512.   XtSetArg (wargs[n], XmNheight, 300);
  513.   n++;
  514.   XtSetArg (wargs[n], XmNdeleteResponse, XmDESTROY);
  515.   n++;
  516.   known_help_dialog = XmCreateFormDialog (w, "Help", wargs, n);
  517.  
  518.   n = 0;
  519.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  520.   n++;
  521.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  522.   n++;
  523.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_FORM);
  524.   n++;
  525.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  526.   n++;
  527.   pop_down_button = XtCreateWidget ("DONE",
  528.                     xmPushButtonWidgetClass,
  529.                     known_help_dialog,
  530.                     wargs,
  531.                     n);
  532.  
  533.   Current_Font = XLoadQueryFont (display, current_server -> font_name);
  534.  
  535.   Font_List = XmFontListCreate (Current_Font, XmSTRING_DEFAULT_CHARSET);
  536.  
  537.   n = 0;
  538.   XtSetArg (wargs[n], XmNfontList, Font_List);
  539.   n++;
  540.   XtSetArg (wargs[n], XmNrows, 20);
  541.   n++;
  542.   XtSetArg (wargs[n], XmNscrollingPolicy, XmAPPLICATION_DEFINED);
  543.   n++;
  544.   XtSetArg (wargs[n], XmNscrollVertical, True);
  545.   n++;
  546.   XtSetArg (wargs[n], XmNscrollHorizontal, False);
  547.   n++;
  548.   XtSetArg (wargs[n], XmNeditMode, XmMULTI_LINE_EDIT);
  549.   n++;
  550.   XtSetArg (wargs[n], XmNeditable, FALSE);
  551.   n++;
  552.   XtSetArg (wargs[n], XmNvalue, my_help_problems);
  553.   n++;
  554.   XtSetArg (wargs[n], XmNwidth, 8 * 80);
  555.   n++;
  556.   XtSetArg (wargs[n], XmNbottomAttachment, XmATTACH_WIDGET);
  557.   n++;
  558.   XtSetArg (wargs[n], XmNbottomWidget, pop_down_button);
  559.   n++;
  560.   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
  561.   n++;
  562.   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
  563.   n++;
  564.   XtSetArg (wargs[n], XmNrightAttachment, XmATTACH_FORM);
  565.   n++;
  566.   known_help_widget = XmCreateScrolledText (known_help_dialog,
  567.                         "Text1", wargs, n);
  568.  
  569.   known_help_atom = XmInternAtom (XtDisplay (known_help_widget),
  570.                   "WM_DELETE_WINDOW",
  571.                   False);
  572.  
  573.   XmAddWMProtocolCallback (XtParent (known_help_dialog),
  574.                known_help_atom,
  575.                pop_down_problems_help,
  576.                NULL);
  577.  
  578.   XtAddCallback (pop_down_button, XmNactivateCallback,
  579.          pop_down_problems_help,
  580.          NULL);
  581.  
  582.   XtManageChild (pop_down_button);
  583.   XtManageChild (known_help_widget);
  584.   XtManageChild (known_help_dialog);
  585.  
  586. }
  587.